home *** CD-ROM | disk | FTP | other *** search
- 100 REM ********** AIRNAV-B.BAS *************************
- 110 REM
- 120 REM *** For Access-Matrix ******
- 130 REM Revised 4/27/85
- 140 REM
- 150 REM For use with sequential data files
- 152 REM
- 154 REM
- 160 REM By Pat Roe, P. O. box 138, Lopez, Washington 98261
- 165 REM Phone 206/468-2220 (Evenings) 206/468-3366 (days)
- 170 REM
- 175 DIM P$(20)
- 190 CLS
- 200 CLOSE
- 220 PRINT "Do you want to:"
- 230 PRINT
- 240 PRINT " 1. Calculate a Flight? 3. Edit waypoint list"
- 250 PRINT " 2. Calculate intermediate points 4. Enter new file"
- 260 PRINT TAB(36); " 5. End program"
- 270 L = VAL(INPUT$(1))
- 280 ON L GOTO 290,290, 700, 560, 5620
- 290 CLS:GOSUB 410
- 300 IF L = 1 GOTO 1500 ELSE GOTO 600
- 400 REM ***************** LOAD FILE ******************************
- 410 REM
- 420 PRINT SPC(10): PRINT "What waypoint file"
- 425 INPUT " (Enter 'SAME' to use existing file";FIL$
- 430 IF FIL$ = "SAME" THEN RETURN
- 440 CLOSE
- 450 OPEN "I",#1, FIL$
- 460 DIM W$(800)
- 470 NF = 1
- 480 INPUT #1,N$
- 485 GOTO 500
- 490 IF LEFT$(N$,3)<"AAA" THEN GOTO 540
- 500 W$(NF) = N$
- 510 IF EOF(1) THEN GOTO 540
- 520 NF = NF+1
- 530 GOTO 480
- 540 CLOSE #1
- 550 RETURN
- 560 CLS
- 570 CLOSE
- 580 GOSUB 410
- 590 GOTO 200
- 600 K = 1
- 610 GOTO 1500
- 700 REM ************** EDIT LIST **************************
- 710 REM
- 720 CLOSE
- 730 CLS
- 740 GOSUB 410
- 750 CLS
- 760 PRINT" Do you want to:"
- 770 PRINT" 1. Read list 2. Enter new points"
- 780 PRINT" 3. Get Waypoint No.--- 4. Get Waypoint XXXXXX "
- 790 PRINT" 5. Return to start 6. Return to flight calc"
- 800 R=VAL(INPUT$(1))
- 810 CLS
- 820 ON R GOTO 970, 830, 840,1380,200, 845
- 830 GOSUB 850:GOTO 750
- 840 GOSUB 1100: GOTO 750
- 845 IF RL = 1 THEN GOTO 2476
- 846 IF RL = 2 THEN GOTO 1680
- 847 GOTO 5150
- 850 REM *********** Waypoint Entry ***************
- 860 CLS
- 870 PRINT SPC(5);"ENTER IN THIS FORM:"
- 880 GOSUB 1160
- 890 PRINT
- 900 PRINT SPC(4): INPUT W$(NF)
- 910 PRINT " 1. OKAY? 2. RE-ENTER"
- 920 IF VAL(INPUT$(1)) = 2 THEN GOTO 870
- 930 NF = NF+1
- 940 PRINT " 1. ENTER ADDITIONAL POINTS 2. RETURN TO START"
- 950 IF VAL(INPUT$(1)) = 1 THEN GOTO 870
- 960 RETURN
- 970 REM ***** Read Waypoint List ******
- 980 CLS
- 990 NL = 1
- 1000 IF NL<1 THEN NL = 1
- 1005 FOR PT% = NL TO NL+19
- 1010 IF PT%>NF THEN GOTO 1080
- 1020 PRINT PT%; TAB(8); W$(PT%)
- 1030 NEXT PT%
- 1040 PRINT:PRINT " 1. NEXT GROUP? 2. PREVIOUS GROUP 3. EXIT?"
- 1050 R = VAL(INPUT$(1))
- 1060 ON R GOTO 1070, 1075, 750
- 1070 CLS:NL=NL+20:GOTO 1000
- 1075 CLS:NL=NL-20:GOTO 1000
- 1080 PRINT " 1. Read Again 2. Exit"
- 1090 IF VAL(INPUT$(1)) = 1 GOTO 980 ELSE GOTO 750
- 1100 REM ************** Get Waypoint No. ? ****************************
- 1110 CLS 190
- 1120 PRINT SPC(10); "What waypoint number do you want "
- 1130 PRINT SPC(10); "( FOR 1 TO 9 ENTER AS '01', '05', ETC.)"
- 1140 W% = VAL(INPUT$(2))
- 1150 GOSUB 1160:GOTO 1200
- 1160 PRINT TAB(7);"SAMPLE FORMAT FOR WAYPOINT ENTRY"
- 1170 PRINT TAB(7);"LOPEZISL S31- 048-29.2 0122-56.3 -21 WA"
- 1180 PRINT TAB(7);"________ ____ ________ _________ ___ __"
- 1190 PRINT: RETURN
- 1200 PRINT W%;TAB(7);W$(W%)
- 1210 PRINT " 1. EDIT 2. NEXT NUMBER 3. NEW NUMBER 4. DONE"
- 1220 R = VAL(INPUT$(1))
- 1230 ON R GOTO 1270, 1240, 1110, 750
- 1240 W% = W% + 1
- 1250 CLS
- 1260 GOTO 1150
- 1270 CLS
- 1280 PRINT SPC(4); "RE-ENTER IN THIS FORMAT"
- 1290 GOSUB 1170
- 1300 PRINT W%, TAB(7);W$(W%)
- 1310 PRINT
- 1320 PRINT SPC(4):INPUT W$(W%)
- 1330 PRINT " 1. OKAY NOW? 2. TRY AGAIN"
- 1340 L = VAL(INPUT$(1))
- 1350 IF L = 1 THEN GOTO 1360 ELSE GOTO 1280
- 1360 CLS
- 1370 RETURN
- 1380 REM ***** GET WAYPOINT XXX *********
- 1390 CLS
- 1400 PRINT " TYPE WAYPOINT XXXXXXXX (up to eight letters)"
- 1410 P$(T) = INPUT$(8)
- 1420 PRINT P$(T)
- 1430 GOSUB 5020
- 1440 W% = P
- 1450 W$(W%) = W$(P)
- 1460 GOSUB 1160
- 1470 GOSUB 1200
- 1480 GOTO 750
- 1500 REM ************ FLIGHT CALC. ***************************
- 1510 REM
- 1520 DT = 0: M = 0
- 1530 IF FIL$ = "SAME" THEN N = 0: LL = 0: GOTO 1570
- 1540 LPRINT CHR$(27);"C";CHR$(66);
- 1545 GOTO 1560
- 1550 LPRINT CHR$(27);"N";CHR$(9)
- 1560 DIM DM(100)
- 1570 CLS
- 1655 IF K = 1 THEN GOTO 1750
- 1660 REM ***** WAYPOINT INPUT **************
- 1661 N = 1
- 1665 PRINT TAB(10); "Enter starting point!"
- 1670 PRINT SPC(10): INPUT P$(N)
- 1675 IF LEN(P$(N))>8 THEN P$(N) = LEFT$(P$(N),8)
- 1680 CLS
- 1685 FOR D = 1 TO N
- 1690 PRINT TAB(10);D;TAB(15);P$(D)
- 1695 NEXT D
- 1700 N = N + 1
- 1705 PRINT
- 1710 PRINT TAB(10); "Enter next waypoint"
- 1715 PRINT TAB(5);"( Enter 'LIST' to look at waypoint list )"
- 1716 PRINT TAB(5);"( Enter 'DONE' if finished with entries)"
- 1717 PRINT TAB(5);"( Enter 'START' to return to start)"
- 1720 PRINT SPC(10): INPUT P$(N)
- 1725 IF LEN(P$(N))>8 THEN P$(N) = LEFT$(P$(N),8)
- 1730 IF P$(N) = "DONE" THEN N = N-1:GOTO 1840
- 1735 IF P$(N) = "LIST" THEN N = N-1: RL = 2: GOTO 750
- 1736 IF P$(N) = "START" THEN GOSUB 190:GOTO 1660
- 1740 GOTO 1680
- 1750 REM ****** GREAT CIRCLE INPUT ***********
- 1755 PRINT TAB(10); "Enter starting point!"
- 1760 PRINT SPC(10): INPUT P$(1)
- 1765 IF LEN(P$(1))>8 THEN P$(1) = LEFT$(P$(1),8)
- 1770 PRINT
- 1775 PRINT TAB(10); "Enter Destination"
- 1780 PRINT SPC(10): INPUT P$(2)
- 1785 IF LEN(P$(2))>8 THEN P$(2) = LEFT$(P$(2),8)
- 1790 PRINT
- 1795 PRINT SPC(10): INPUT "Leg Distance";X
- 1800 LD = X/(57.2958*60)
- 1805 L = 1
- 1810 GOTO 1860
- 1840 PRINT:INPUT " Enter estimated ground speed: ";GS
- 1850 FOR L=1 TO N-1
- 1860 T=L
- 1870 GOSUB 5020
- 1880 W1$ = W$(P)
- 1890 L1$ = MID$(W1$,15,8)
- 1900 T1$ = MID$(W1$,24,9)
- 1910 V1$ = MID$(W1$,34,3)
- 1920 T = L+1
- 1930 GOSUB 5020
- 1940 W2$ = W$(P)
- 1950 L2$ = MID$(W2$,15,8)
- 1960 T2$ = MID$(W2$,24,9)
- 1970 V2$ = MID$(W2$,34,3)
- 1980 Z$ = L1$
- 1990 GOSUB 5170
- 2000 L1 = W
- 2010 Z$ = L2$
- 2020 GOSUB 5170
- 2030 L2 = W
- 2040 Z$ = T1$
- 2050 GOSUB 5200
- 2060 T1 = W
- 2070 Z$ = T2$
- 2080 GOSUB 5200
- 2090 T2 = W
- 2100 X = (SIN(L1)*SIN(L2)) +(COS(L1)*COS(L2)*COS(T2-T1))
- 2110 GOSUB 5390
- 2120 D=Y
- 2130 DM(L)=D*3437.75
- 2140 X = ((SIN(L2))-((SIN(L1))*COS(D)))/(SIN(D)*COS(L1))
- 2150 GOSUB 5390
- 2160 C=Y
- 2170 T=C
- 2180 GOSUB 5460
- 2190 C=T
- 2200 CT = CINT(C*57.2958)
- 2210 IF N<2 THEN DT = 0
- 2220 DT=DM(L) + DT
- 2230 IF K=1 THEN GOTO 3000
- 2250 A$ = STR$(FIX(DT/GS))
- 2260 B$ = STR$(CINT(60*((DT/GS)-FIX(DT/GS))))
- 2262 B$ = RIGHT$(B$,2)
- 2265 IF VAL(B$)<10 THEN B$ = "0" + RIGHT$(B$,1)
- 2270 TM=CINT(60*DM(L)/GS)
- 2275 REM ***************** PRINT OUTPUT ***************************
- 2280 IF L=1 THEN GOSUB 5550
- 2290 IF L>1 THEN GOTO 2360
- 2300 M = M+1
- 2310 LPRINT " ";P$(M)
- 2320 M = M+1
- 2330 LPRINT CHR$(15);" ";L1$
- 2340 LPRINT " ";T1$;TAB(21);V1$
- 2350 LPRINT CHR$(18);" ";Q$
- 2360 LPRINT " ";P$(M)
- 2370 M = M+1
- 2380 LPRINT CHR$(15);" ";L2$;TAB(21);CT;TAB(33);CINT(DM(L));TAB(46);TM
- 2390 LPRINT " ";T2$;TAB(21);V2$;TAB(32);CINT(DT);TAB(45);A$+":"+B$
- 2400 LPRINT CHR$(18);" ";Q$
- 2410 B$ = STR$(CINT(60*((DT/GS)-FIX(DT/GS))))
- 2415 IF N<=8 THEN GOTO 2430
- 2420 IF ((CINT(L/7))-(L/7)) = 0 THEN LPRINT CHR$(12)
- 2430 IF G=1 THEN GOTO 2460
- 2440 IF LA = 1 THEN GOTO 2460
- 2450 NEXT L
- 2460 PRINT:PRINT " 1. Add another leg 2. Look at list 3. Done!"
- 2470 R = VAL(INPUT$(1))
- 2473 ON R GOTO 2480,2475, 2540
- 2475 RL = 1: GOTO 750
- 2476 CLS:GOTO 2460
- 2480 N=N+1: LA = 1
- 2490 L=N-1
- 2500 PRINT:INPUT " Enter additional waypoint";P$(N)
- 2510 IF LEN(P$(N))>8 THEN P$(N) = LEFT$(P$(N),8)
- 2520 GOTO 1860
- 2530 CLOSE #1
- 2540 LPRINT TAB(5);"Estimated Ground Speed =";GS
- 2542 CLS
- 2545 LPRINT CHR$(12)
- 2547 CLS
- 2550 GOTO 220
- 3000 REM *************** Intermediate Points **********************
- 3010 LTO = L1
- 3020 LOO = T1
- 3030 LTD = L2
- 3040 LOD = T2
- 3050 REM ************** VERTEX ***************************
- 3060 X = SIN(C)*COS(LTO)
- 3070 GOSUB 5390
- 3080 LTV = Y
- 3090 X= TAN(C)*SIN(LTO)
- 3100 Y = ATN(1/X)
- 3110 LVO = Y
- 3120 LOV = LVO-LOO
- 3130 REM ************ COURSE SEGMENT *****************
- 3140 FOR N = 1 TO FIX(D/LD)
- 3150 CLS
- 3160 X = (COS(C))*(SIN(LD*N))*(COS(LTO))+(SIN(LTO))*(COS(LD*N))
- 3170 GOSUB 5430
- 3180 LTX = Y
- 3190 REM K********* COMPUTE LEG COURSE ************************
- 3200 IF N = 1 THEN LA = L2
- 3210 X = ((SIN(LTX))-(SIN(LA))*(COS(LD)))/(SIN(LD)*COS(LA))
- 3220 GOSUB 5390
- 3230 CL = Y
- 3240 X = ((SIN(L2))-(SIN(LTX))*(COS(D-N*LD)))/SIN(D-N*LD)*COS(LTX)
- 3250 GOSUB 5390
- 3260 CX = Y
- 3270 LA = LTX
- 3280 REM *************** COMPUTE LONGITUDE ************************
- 3290 X = TAN(LTX)/TAN(LTV)
- 3300 GOSUB 5390
- 3310 LVX = Y
- 3320 IF CX>3.14159 THEN GOTO 3350
- 3330 IF CX<1.57079 THEN LOX = LVX-LOV ELSE LOX = -LVX-LOV
- 3340 GOTO 3380
- 3350 IF CX<4.71238 THEN LOX=3.14159-(LVX+LOV) ELSE LOX =(LVX-LOV)-3.14159
- 3360 IF LOX<-3.14159 THEN LOX = 6.28318 + LOX
- 3370 IF LOX> 3.14159 THEN LOX = LOX - 6.28318
- 3380 REM *********** CONVERT VALUES ************************
- 3390 T = CL
- 3400 GOSUB 5460
- 3410 CL = T
- 3420 Z = LTX
- 3430 GOSUB 5230
- 3440 L5$ = M$
- 3450 Z = LOX
- 3460 GOSUB 5230
- 3470 L6$ = M$
- 3480 REM *************** OUTPUT FORMAT *****************************
- 3490 IF N>1 GOTO 3570
- 3500 LPRINT CHR$(27);"N";CHR$(1);CHR$(27);"Q";CHR$(50)
- 3510 LPRINT CHR$(14)
- 3520 X$ = STRING$(50,42):LPRINT X$
- 3530 LPRINT "FROM:";LEFT$(W1$,8);TAB(17);"Lat:";L1$;TAB(36);"Long:";T1$
- 3540 LPRINT "TO: ";LEFT$(W2$,8);TAB(17);"Lat:";L2$;TAB(36);"Long:";T2$
- 3550 LPRINT "Total Distance: ";FIX(D*3437.75);"miles"; TAB(30);"Each Leg:";FIX(LD*3437.75);" miles"
- 3560 LPRINT X$
- 3570 IF LL = 1 GOTO 3610
- 3580 IF N = 1 THEN CX = CT ELSE CX = CINT(CL*57.2958)
- 3590 LPRINT "Point #";N;TAB(17);"Lat:";L5$;TAB(36);"Long:";L6$
- 3600 GOTO 3630
- 3610 LPRINT "Point #";N;TAB(17);"Lat:";L2$;TAB(36);"Long:";T2$
- 3620 REM
- 3630 IF IC <> 1 THEN GOTO 3660
- 3640 LPRINT "True Course:";CT;TAB(22);"Dist to Intercept:";FIX(D*3437.75);"miles "
- 3650 GOTO 3670
- 3660 LPRINT "True Course: ";CX;TAB(30);"Leg Dist: ";FIX(LD*3437.75);"miles "
- 3670 REM
- 3680 LPRINT X$
- 3690 IF LL = 1 GOTO 3750
- 3700 IF IC = 1 THEN GOTO 3750
- 3710 NEXT N
- 3720 LL = 1
- 3730 LD = D -((N-1)*LD)
- 3740 GOTO 3360
- 3750 GOSUB 190
- 3760 PRINT TAB(10); " Compute intercept 1.Lattitude 2.Longitude 3. End"
- 3770 L = VAL(INPUT$(1))
- 3780 ON L GOTO 3790, 4060, 4220
- 3790 REM *************** COMPUTE INTERCEPT - LONGITUDE *******************
- 3800 CLS
- 3810 IC = 1
- 3820 PRINT TAB(10); " Intercept at what Lattitude "
- 3830 PRINT SPC(10): INPUT "( Type in format 000-00.0 )";LTX$
- 3840 Z$ = LTX$ : GOSUB 5170
- 3850 LTX = W
- 3860 X = TAN(LTX)/TAN(LTV)
- 3870 GOSUB 5390
- 3880 LVX = Y
- 3890 IF C>3.14159 THEN GOTO 3920
- 3900 IF C<1.57079 THEN LOX = LVX-LOV ELSE LOX = -LVX-LOV
- 3910 GOTO 3950
- 3920 IF C<4.71238 THEN LOX=3.14159-(LVX+LOV) ELSE LOX =(LVX-LOV)-3.14159
- 3930 IF LOX<-3.14159 THEN LOX = 6.28318 + LOX
- 3940 IF LOX> 3.14159 THEN LOX = LOX - 6.28318
- 3950 X = SIN(L1)*SIN(LTX) + COS(L1)*COS(LTX)*(COS(LOX - T1))
- 3960 GOSUB 5390
- 3970 D = Y
- 3980 Z = LTX
- 3990 GOSUB 5230
- 4000 L5$ = M$
- 4010 Z = LOX
- 4020 GOSUB 5230
- 4030 L6$ = M$
- 4040 N = N+1: LL = 0
- 4050 GOTO 3480
- 4060 REM ************ COMPUTE INTERCEPT - LAT. **********************
- 4070 IC = 1
- 4080 CLS
- 4090 PRINT TAB(10); "Intercept at what longitude?"
- 4100 PRINT SPC(10): INPUT "(Type in format 0000-00.0 )";LOX$
- 4110 Z$ = LOX$
- 4120 GOSUB 5200
- 4130 LOX = W
- 4140 IF C>3.14159 THEN GOTO 4170
- 4150 IF C<1.57079 THEN LVX = LOX + LOV ELSE = LOX-LOV
- 4160 GOTO 4180
- 4170 IF C<4.71238 THEN LVX = 3.14159-(LOX + LOV) ELSE LVX = LOX-LOV-3.14159
- 4180 X = COS(LVX)*TAN(LTV)
- 4190 Y = ATN(X)
- 4200 LTX = Y
- 4210 GOTO 3950
- 4220 LPRINT CHR$(12)
- 4230 K = 0: IC = O: LL = 0: GOTO 220
- 5000 REM **************SUBROUTINES************************
- 5010 REM
- 5020 REM **** Find Waypoint *********
- 5030 P = 1
- 5040 REM
- 5050 G = LEN(P$(T))
- 5060 IF FR = 1 THEN X$ = MID$(W$(P),10,G):GOTO 5080
- 5070 X$ = LEFT$(W$(P),G)
- 5080 IF X$ = P$(T) THEN RETURN
- 5090 IF P>NF THEN GOTO 5120
- 5100 P = P+1
- 5110 GOTO 5040
- 5120 PRINT:PRINT " No such waypoint as ";P$(T)
- 5121 PRINT:PRINT " 1. Look at waypoint list 2. Re-enter waypoint "
- 5122 IF VAL(INPUT$(1)) = 1 THEN GOTO 750
- 5130 PRINT:INPUT " Type in correct waypoint ";P$(T)
- 5140 IF LEN(P$(T))>8 THEN P$(T) = LEFT$(P$(T),8)
- 5150 GOTO 5030
- 5160 RETURN
- 5170 REM ******* Convert Deg-Rad (lat.) ****************
- 5180 W=(VAL(LEFT$(Z$,3))+.01667*(VAL(RIGHT$(Z$,4))))/57.2958
- 5190 RETURN
- 5200 REM ******* Convert Deg-Rad (long) ****************
- 5210 W=(VAL(LEFT$(Z$,4))+.01667*(VAL(RIGHT$(Z$,4))))/57.2958
- 5220 RETURN
- 5230 REM ******** Convert Radians to Degrees **************
- 5240 M1 = FIX(57.2958*Z)
- 5250 M2 = (FIX((57.2996*Z - M1)*600))*.1
- 5260 M2$ = STR$(M2)
- 5270 IF LEFT$(M2$,1) = " " THEN M2$ = RIGHT$(M2$,(LEN(M2$)-1))
- 5280 IF M2<1 THEN M2$ = "00" + M2$
- 5290 IF M2>1 THEN IF M2<10 THEN M2$ = "0" + M2$
- 5300 IF LEN(M2$)<4 THEN M2$ = M2$ + "0": GOTO 5300
- 5310 IF MID$(M2$,3,1) = "0" THEN M2$ = LEFT$(M2$,2) + "." + MID$(M2$,3,1)
- 5320 M1$ = STR$(M1)
- 5330 IF Z = LTX GOTO 5360
- 5340 IF LEN(M1$)<4 THEN M1$ = "0" + M1$: GOTO 5340
- 5350 GOTO 5370
- 5360 IF LEN(M1$)<3 THEN M1$ = "0" + M1$: GOTO 5360
- 5370 M$ = M1$ + "-" + M2$
- 5380 RETURN
- 5390 REM ******** Arc cos *******
- 5400 IF ABS(X)>1 THEN X = 1
- 5410 Y = -ATN(X/SQR(-X*X+1))+1.5708
- 5420 RETURN
- 5430 REM ******* Arc Sin **********
- 5440 Y = ATN(X/SQR(-X*X+1))
- 5450 RETURN
- 5460 REM ******** Course Correction *******
- 5470 LOO = T1
- 5480 LOD = T2
- 5490 IF LOD>LOO THEN T=6.28318-T ELSE T=T
- 5500 IF LOD>0 THEN IF LOO>0 THEN GOTO 5530
- 5510 IF LOD<0 THEN IF LOO<0 THEN GOTO 5530
- 5520 T=6.28318-T
- 5530 RETURN
- 5540 REM
- 5550 REM******* PLAN FORMAT *************
- 5560 Q$ = STRING$(41,45):LPRINT " ";Q$
- 5570 LPRINT CHR$(27);"E";" POINT";TAB(15);"COURSE";TAB(22);"DIST.";TAB(28);"EST.TIME";TAB(37);"ACTUAL TIME";CHR$(27);"F";CHR$(15)
- 5580 LPRINT " Lattitude";TAB(22);"True";TAB(34);"Leg Dist.";TAB(44);"Leg";TAB(60);"Leg"
- 5590 LPRINT " Longitude";TAB(22);"Variation";TAB(34);"Total";TAB(44);"Total";TAB(60);"Total";CHR$(18)
- 5600 LPRINT " "; Q$
- 5610 RETURN
- 5620 REM ******************** END PROGRAM ***********************
- 5630 PRINT TAB(10);"SAVE CHANGES IN THE FILE? (yes/no)
- 5640 IF INPUT$(1) = "Y" THEN GOTO 5670
- 5650 PRINT "END OF PROGRAM"
- 5660 END
- 5670 REM ************** SAVE CHANGES **************
- 5680 CLOSE #1
- 5690 OPEN "O", #1, FIL$
- 5700 P = 1
- 5710 IF LEFT$(W$(P),3)<"AAA" THEN GOTO 5750
- 5720 WRITE #1, W$(P)
- 5730 P = P+1
- 5740 GOTO 5710
- 5750 CLOSE #1
- 5760 GOTO 5650